package com.jvyou.thread.d12waitandnotify;

/**
 * @author 橘柚
 * @version 1.0-SNAPSHOT
 * @Date 2024/7/31 14:24
 * @Description 初始线程，用于生产食物
 */
public class Cook extends Thread {

    @Override
    public void run() {
        // 1. 循环
        while (true) {
            // 2. 同步代码块
            synchronized (Table.lock) {
                if (Table.count == 0) {
                    // 3. 消费到末尾
                    break;
                } else {
                    // 4. 执行核心逻辑
                    // 判断桌子上面有没有食物，有食物则等待
                    if (Table.food == 1) {
                        try {
                            // 一定是锁等待，让当前线程和锁关联
                            System.out.println("桌子上面已经存在食物，等待消费者吃掉");
                            Table.lock.wait();
                        } catch (InterruptedException e) {
                            throw new RuntimeException(e);
                        }
                    } else {
                        // 没有食物，生产食物
                        Table.food = 1;
                        System.out.println("生产者生产了食物");
                        // 通知消费者
                        Table.lock.notifyAll();
                    }
                }
            }
        }
    }
}
